Til Home

2020-05-22-TIL

Fact

  • 오늘은 프로그래머스에 있는 ”여행 경로” 문제를 풀었다. 오늘 역시 같은 실수를 저지르고 말았다. 분명 dfs/bfs 문제인데 루프로 몇 번 돌려서 결과를 얻으려고 했다. 주어진 테스트 케이스는 잘 돌아가지만 역시나 프로그래머스에 제출을 누르면 통과가 안됐다. 나중에 따로 시간 내서 bfs를 써서 다시 풀어서 통과시켰다.
  • 알고리즘 문제 외에 다른 시간에는 어제 java로 만든 todo App를 객체 지향적으로 만들려고 노력했다. 일단 로직, ui, controller 간의 관심사의 분리, 변수 명의 명확한 의도를 나타나게끔 노력했다. 처음에는 모든 것을 나누는 게 낫다고 생각해서 main controller 와 sub controller인 Selector을 만들었다. main에서 ui에 있는 유저의 input을 감지하는 로직을 불러와서 써서 그 input을 sub controller인 Selector에 전달했다. sub collector인 Selector에서 받은 input에 따라 다른 로직들을 domain과 ui에서 불러올 수 있게끔 만들었었다. 예를 들어서 main controller에서 1을 Selector에 전달하면 1에 맞는 로직인 추가를 domain에서 가져와서 실행할 수 있게 끔 만들었다. 그 외에 ui에 해당되는 Script들을 카테고리 별로 나눴다. 예를 들어서 명령어를 받을 때 쓰는 script와 명령어를 표시해 주는 script 등으로. 그리고 controller에서 ui를 분리하기 위해서 scanner을 Listener이라는 class에 넣어서 불러서 쓸 수 있게끔 만들었었다.
  • 피드백 받은 후에 Listener을 지우고 inputView라는 비슷한 이름과 역할을 가진 class를 만들었다. 개행문자인 \n 도 지웠다. 또한 100줄이 넘긴 하지만 Script를 한 파일에 다 통합을 하였다. domain과 ui 연결이 안 되게끔 분리를 했다. 변수 명도 의도가 명확하게 들어 날 수 있게 바꾸었다. 그리고 마지막으로 main controller와 sub controller를 통합 시켰다.

Feeling

  • 사람은 똥을 한번 밟는다고 다음에 피해 갈 거라는 보장이 없다. 오늘도 어김없이 똥을 밟았다. 역시 캐시메모리에는 한계가 있다. 분명 문제 유형에 맞는 풀이법을 써야 하는데 ”어 혹시 되나?” 하다가 또 똥 밟았다. 뿌직.
  • 객체지향이 뭐지…? 너무 너무 어렵다!!

Findings

  • 프로그래머스에서 문제 유형별로 나눈 이유가 있다. 유형에 맞는 풀이법을 쓰지 않으면 통과가 안된다.
  • 객체지향적으로 만들 때 ui, app, domain, infra 레이어들이 있다. ui는 화면 처리에 대한 layer이다. 무엇인가 화면에 표시하거나 그런 기능들이 담겨 있다. domain은 무엇에 대한 것과 domain 에 대한 로직들을 가지고 있다. 예를 들어서 domain이 손이면 domain이 담고 있는 로직들은 주먹 쥐는 로직, 주먹 펴는 로직, 뭔가 잡는 로직 등등을 가지고 있고 손가락, 손톱 등의 변수들을 가지고 있을 것이다. 주먹 쥐는 로직에는 손가락을 구부리는 로직을 부를 것이고, 손가락 구부리는 로직에서는 마디별로 접는 로직을 불러서 쓸 것이다. infra는 나도 모르겠다. app은 controller같은 것인데 이 controller에서 ui와 domain을 연결시키는 작업을 한다. 조금 더 명확하게 말해서 ui/domain에 있는 메서드들을 호출해서 쓴다. 이 메서드들을 메시지라고도 한다. 왜냐하면 app이 ui/domain에게 app에 적힌 일련의 명령어를 하라고 메시지를 보내는것 처럼 되어 있어서 그렇다.

Future action

  • 제발 다음에는 문제 유형을 보고 유형에 맞는 풀이법을 쓰도록 하자.
  • 피드백 받기 전에 이 정도면 되겠지 했는데 무참히 짓밟혔다. 역시 사람은 단순해서 남의 의견도 들어 봐야지 잘못됐는지 알게 된다. 그러니 피드백을 빨리 많이 받도록 하자.

Feedback